#include <iostream>

using std::cout;
using std::endl;

void test()
{
    //[]捕获列表，捕获外部局部变量
    //()函数的参数列表
    //opt可选项，mutable(可修改)
    //returnType:函数的返回类型
    //{}函数的函数体
    /* []()opt->returnType{ */
    /* }; */
    /* auto f = [](int value){ */
    /*     cout << value << endl; */
    /* }; */

    //值捕获：将外部局部变量拷贝到lambda中，并且默认是不能进行修改的，如果想要
    //进行修改，可以使用mutable进行修饰；
    //引用捕获：将外部局部变量的引用传递到lambda表达式，可以进行读操作，也可以
    //进行修改
    int a = 111;
    [a](int value){
        ++value;
        cout << "value = " << value << endl;
        cout << "a = " << a << endl;
    }(100);
    cout << "a = " << a << endl;

    [&a](int value){
        ++value;
        cout << "value = " << value << endl;
        ++a;
        cout << "a = " << a << endl;
    }(100);
    cout << "a = " << a << endl;

}

int main(int argc, char *argv[])
{
    test();
    return 0;
}

